package com.yansl.http.intercepter;

import java.util.Map;

import org.springframework.http.HttpHeaders;
import org.springframework.http.HttpMethod;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;

/**
 * @description: HTTP拦截器
 * @author: yansl.cn
 * @create: 2022-12-18 14:25
 */
public interface HttpIntercepter {

    Class getHttpIntercepterClass();

    /**
     * 设置请求头,此处可以设置Token
     * 
     * @param headers
     * @return
     */
    default HttpHeaders requestHeads(HttpHeaders headers) {
        return headers;
    }

    /**
     * 设置请求地址,此处可以设置Token
     * 
     * @param url
     * @return
     */
    default String requestUrl(String url) {
        return url;
    };

    /**
     * 请求之前，true 继续请求，false 取消请求
     * 
     * @param httpMethod
     *            请求类型
     * @param url
     *            请求地址
     * @param params
     *            请求参数（POST请求有值，GET该参数为null）
     * @return
     */
    default boolean requestBefore(HttpMethod httpMethod, String url, Map<String, Object> params) {
        return Boolean.TRUE;
    }

    /**
     * 请求之后，返回结果之前
     * 
     * @param responseEntity
     *            请求结果
     * @return
     */
    default String requestAfter(ResponseEntity<String> responseEntity) {
        if (responseEntity.getStatusCodeValue() == HttpStatus.OK.value()) {
            return responseEntity.getBody();
        }
        return null;
    }

}
